嗨!大家好久不見,因為連假有點無聊(邊緣人),所以想說學一下PostgreSQL怎麼用,就順便紀錄過程分享。因為自己本身不是前後端專門,所以如果哪裡有誤請大家多多包涵指教,那就開始囉~
這裡就不特別說明Postgres的安裝了,連結在下方(MacOS):
app.py的檔案,用來定義與執行此應用程式。在Flask要建立一個程式的進入點只需要匯入它(import flask class),並且初始及實例化:app = Flask(__name__)
if __name__ == '__main__':
    app.run()
這段程式碼是為了自動執行flask的class內所有function。
My Flask App,請加上以下程式碼:@app.route('/')
def index():
    return 'My Flask App!'
app.run()前)app.config['DEBUG'] = True
app.py後,可以看到Running on http://127.0.0.1:5000/這表示我們的程式碼已經執行起來了,並且在5000port。到localhost:5000看一下是否有畫面,就可以看到My Flask App!5000,不是的話請自行更改!那我們第一個Flask web app就完成了!
那接下來要建立資料庫了,Flask內有Flask-Alchemy可以用來操作PostreSQL。沒有的話請先用pip安裝起來!
app.py內直接新增程式碼,或是分開到另外一個models.py,並且加上:from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
postgresql://的內容更改成自己資料庫的設定。app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://DB_USER:PASSWORD@HOST/DATABASE'
POSTGRES = {
    'user': 'plusone',
    'password': 'my_password',
    'db': 'my_database',
    'host': 'localhost',
    'port': '5432',
}
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://%(user)s:\
%(password)s@%(host)s:%(port)s/%(db)s' % POSTGRES
db.init_app(app)連接我們的應用程式,不過在這之前請先import db到app.py。附註:我將models分開寫所以import models。from models import db
# your app config  
db.init_app(app)
在前面Configure時我們已經定義好要的Database了,現在要來新增資料庫表格。
class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(255),nullable=False)
    birthday = db.Column(db.String(10))
    phone = db.Column(db.String(10), unique=True, nullable=False)
    email = db.Column(db.String(255), nullable=False, unique=True) 
__tablename__:定義表格名稱。id, name, birthday, phone, email為我們表格內的column名稱(根據自己需求去定義)。現在建立好Class了,現在我們要透過flask_script及flask_migrate模組來執行資料庫的migrations。先建立一個manage.py檔案。
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app, db
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
manage.py中migration指令,所以最後需要加上:if __name__ == '__main__':
    manager.run()
最後我們要來migrate我們的應用了!(話說前陣子因為需要學laravel才比較知道model migrate是什麼XD)
$ python manage.py db init
migrations的資料夾,執行manage檔案的db migrate產生新的Migration到migrations資料夾。$ python manage.py db migrate
$ python manage.py db upgrade
migration有任何更改或更新版本,都可以在alembic_version看到。alembic_versiontable以及userstable.
好的,那今天就到這裡囉~掰掰!